# -*- coding = utf-8 -*-
# @Time : 2021/8/6 10:27
# @Author :Henry L
# @File : Data_compare.py
# @Software : PyCharm


class StringCompareUtil:
    deletestrlist = ['省', '市', '自治区', '旗', '县', '自治州', '区', '镇', '自治县']

    def compare(self, text1, text2):
        if len(text2) < 1 or len(text1) < 1:
            return 0
        '先处理字符串,过滤掉一些中国的行政区划的名称(省、市、县、自治区、旗、地区、xxxx自治县)'
        str1 = self.deleteRedundances(text1)
        str2 = self.deleteRedundances(text2)
        short = min(len(str1), len(str2))
        if short < 7:
            return 0
        re = self.searchSame(str1, str2)
        return float(re / short)

    def compare_full(self, text1, text2):
        if len(text2) < 1 or len(text1) < 1:
            return 0
        '先处理字符串,过滤掉一些中国的行政区划的名称(省、市、县、自治区、旗、地区、xxxx自治县)'
        str1 = self.deleteRedundances(text1)
        str2 = self.deleteRedundances(text2)
        short = min(len(str1), len(str2))
        re = self.searchSame(str1, str2)
        return float(re / short)

    def deleteRedundances(self, str1):
        for ext in self.deletestrlist:
            if ext in str1:
                # replace 不会有返回值
                str1 = str1.replace(ext, '', 1)
        return str1

    def searchSame(self, str1, str2, case_sensitive=False):
        """
            str1 和 str2 的最长公共子序列
            :param str1: 字符串1
            :param str2: 字符串2（正确结果）
            :param case_sensitive: 比较时是否区分大小写，默认区分大小写
            :return: 最长公共子序列的长度
         """
        len_str1 = len(str1)
        len_str2 = len(str2)
        # 定义一个列表来保存最长公共子序列的长度，并初始化
        record = [[0 for i in range(len_str2 + 1)] for j in range(len_str1 + 1)]
        for i in range(len_str1):
            for j in range(len_str2):
                if str1[i] == str2[j]:
                    record[i + 1][j + 1] = record[i][j] + 1
                elif record[i + 1][j] > record[i][j + 1]:
                    record[i + 1][j + 1] = record[i + 1][j]
                else:
                    record[i + 1][j + 1] = record[i][j + 1]
        return record[-1][-1]
